package main

import (
	__ "ai_srv/basic/ai_proto"
	"context"
	"fmt"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	"log"
)

// 测试多轮对话功能的客户端
// 演示如何使用gRPC客户端进行多轮对话
func main() {
	// 连接到gRPC服务器
	conn, err := grpc.Dial("127.0.0.1:50051", grpc.WithTransportCredentials(insecure.NewCredentials()))
	if err != nil {
		log.Fatalf("连接失败: %v", err)
	}
	defer conn.Close()

	// 创建AI服务客户端
	client := __.NewAiClient(conn)
	ctx := context.Background()

	// 测试用户ID
	userID := int32(1)

	fmt.Println("=== AI多轮对话测试 ===")
	fmt.Println("正在测试多轮对话功能...")
	fmt.Println()

	// 第一轮对话：创建新会话
	fmt.Println("--- 第一轮对话：创建新会话 ---")
	req1 := &__.ChatWithAIReq{
		UserId:    userID,
		SessionId: "", // 空字符串表示创建新会话
		Message:   "你好，我想了解一下Go语言的特点",
	}

	resp1, err := client.ChatWithAI(ctx, req1)
	if err != nil {
		log.Fatalf("第一轮对话失败: %v", err)
	}

	fmt.Printf("用户: %s\n", req1.Message)
	fmt.Printf("AI: %s\n", resp1.ChatWithAI)
	fmt.Printf("会话ID: %s\n", resp1.SessionId)
	fmt.Println()

	// 第二轮对话：继续同一会话
	fmt.Println("--- 第二轮对话：继续同一会话 ---")
	req2 := &__.ChatWithAIReq{
		UserId:    userID,
		SessionId: resp1.SessionId, // 使用第一轮返回的会话ID
		Message:   "Go语言在并发编程方面有什么优势？",
	}

	resp2, err := client.ChatWithAI(ctx, req2)
	if err != nil {
		log.Fatalf("第二轮对话失败: %v", err)
	}

	fmt.Printf("用户: %s\n", req2.Message)
	fmt.Printf("AI: %s\n", resp2.ChatWithAI)
	fmt.Printf("会话ID: %s\n", resp2.SessionId)
	fmt.Println()

	// 第三轮对话：继续同一会话
	fmt.Println("--- 第三轮对话：继续同一会话 ---")
	req3 := &__.ChatWithAIReq{
		UserId:    userID,
		SessionId: resp2.SessionId, // 使用第二轮返回的会话ID
		Message:   "能给我一个简单的Go并发编程示例吗？",
	}

	resp3, err := client.ChatWithAI(ctx, req3)
	if err != nil {
		log.Fatalf("第三轮对话失败: %v", err)
	}

	fmt.Printf("用户: %s\n", req3.Message)
	fmt.Printf("AI: %s\n", resp3.ChatWithAI)
	fmt.Printf("会话ID: %s\n", resp3.SessionId)
	fmt.Println()

	// 查询会话历史
	fmt.Println("--- 查询会话历史 ---")
	historyReq := &__.GetHistoryReq{
		UserId:    userID,
		SessionId: resp3.SessionId, // 查询当前会话的历史
		Limit:     10,
	}

	historyResp, err := client.GetHistory(ctx, historyReq)
	if err != nil {
		log.Fatalf("查询历史失败: %v", err)
	}

	fmt.Printf("会话 %s 的历史记录:\n", resp3.SessionId)
	for i, item := range historyResp.Items {
		fmt.Printf("第%d轮:\n", i+1)
		fmt.Printf("  用户: %s\n", item.UserMessage)
		fmt.Printf("  AI: %s\n", item.AiMessage)
		fmt.Printf("  时间: %s\n", item.CreatedAt)
		fmt.Println()
	}

	// 查询用户的会话列表
	fmt.Println("--- 查询用户会话列表 ---")
	sessionListReq := &__.GetSessionListReq{
		UserId: userID,
		Limit:  10,
	}

	sessionListResp, err := client.GetSessionList(ctx, sessionListReq)
	if err != nil {
		log.Fatalf("查询会话列表失败: %v", err)
	}

	fmt.Printf("用户 %d 的会话列表:\n", userID)
	for i, session := range sessionListResp.Sessions {
		fmt.Printf("会话%d:\n", i+1)
		fmt.Printf("  会话ID: %s\n", session.SessionId)
		fmt.Printf("  标题: %s\n", session.Title)
		fmt.Printf("  创建时间: %s\n", session.CreatedAt)
		fmt.Printf("  更新时间: %s\n", session.UpdatedAt)
		fmt.Println()
	}

	fmt.Println("=== 多轮对话测试完成 ===")
	fmt.Println("测试结果:")
	fmt.Println("✓ 成功创建新会话")
	fmt.Println("✓ 成功进行多轮对话")
	fmt.Println("✓ 成功查询会话历史")
	fmt.Println("✓ 成功查询会话列表")
	fmt.Println("✓ 多轮对话功能正常工作")
}
